//循环移位器
//模块参数：
//  k:待移位数的位宽,默认值：8
//  lk:左移位数的位宽,默认值: 3,lk<k
//输入：
//  a:待移位的数,位宽为k
//  n:循环移位位数,位宽为lk
//输出：
//  b:移位后的结果,位宽为k
module LoopShift(n,a,b);
  parameter k=8;
  parameter lk=3;
  input [lk-1:0] n;
  input [k-1:0] a;
  output [k-1] b;
  //左移位后完整数，x位宽为k+k-1,移出的位占用位宽最多为k-1
  wire [2*k-2:0] x = a<<n;
  assign b = x[k-1:0] | {1'b0,x[2*k-2:k]};
endmodule


